package com.bdqn.spark.chapter02

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

class WordCount1{

}
/**
 * windows的开发模式：不是local模式
 */
object WordCount1 {
  def main(args: Array[String]): Unit = {


    // 获取spark程序运行的上下文对象 SparkContext
    val conf: SparkConf = new SparkConf()
    // local yarn spark://hadoop182:7072 mesos
    conf.setMaster("local[*]")
    conf.setAppName("word-count")
    val sc: SparkContext = new SparkContext(conf)
    // println(sc)

    // 就可以对数据进行处理
    //  hello spark
    //  hello scala
    val lineRDD: RDD[String] =
    sc.textFile("data/word.txt")

    // "hello" "spark" "hello" "scala"
    val wordRDD: RDD[String] = lineRDD.flatMap(line => {
      line.split(" ")
    })


    // ("hello",1) ("spark",1) ("hello",1) ("scala",1)
    val wordToOneRDD: RDD[(String, Int)] = wordRDD.map(word => {
      (word, 1)
    })

    // ("hello",1)  ("hello",1)
    // ("spark",1)
    // ("scala",1)
    // 第一步：按照相同的key分组
    // 第二步：对分组后的数据进行聚合
    val resultRDD: RDD[(String, Int)] =
    wordToOneRDD.reduceByKey((mid, value) => mid + value)

    // 把最终的结果，输出到控制台
    val arr: Array[(String, Int)] = resultRDD.collect()

    arr.foreach(println)

    // 关闭资源
    sc.stop()
  }
}
